package QueryRunnner包;

import JdbcUtils.JdbcUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.junit.Test;

import java.sql.Connection;
import java.sql.SQLException;

/**
             * QueryRunner类：是一个封装后的JDBC类。可以对数据库进行CRUD操作（增删改查）;
             * update()方法：可以进行插入操作
             * query()方法：可以进行删，改，查操作
             */
public class QueryRunnerTest {

    //测试插入操作
    @Test
    public void TestInsert(){
            Connection conn=null;
        try {
            //创建一个QueryRunner类对象
            QueryRunner runner=new QueryRunner();
            //从JdbcUtils中获取一个数据库连接
            conn= JdbcUtils.getConnection();
            //将要执行的sql语句，用string类型封装
            String str="INSERT INTO t_user(`loginName`,`loginPwd`,`realName`) VALUES(?,?,?)";
            //调用QueryRunner类的update()方法，进行执行sql语句
            int i = runner.update(conn, str, "LiSi", "111111", "李斯");
            //打印结果
            System.out.println("总共有"+i+"条受影响！");

        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            //释放资源
            JdbcUtils.closeResource(conn);
        }

    }

    /**
     * BeanHandler是ResultSetHandler的实现类，用于封装一条记录
     * BeanListHandler,用于封装多条记录
     */

    //测试查询操作
    @Test
    public void TestQuery(){
        Connection connection=null;
        try {
            //创建一个QueryRunner类对象
            QueryRunner queryRunner=new QueryRunner();
            //从JdbcUtils中获取一个数据库连接
            connection = JdbcUtils.getConnection();
            //将要执行的sql语句，用string类型封装
            String str="SELECT realName\n" +
                    "FROM `t_user`\n" +
                    "WHERE realName=?";
            //调用BeanHandler<>封装器，进行封装一条记录
            BeanHandler<Customer> beanHandler=new BeanHandler<Customer>(Customer.class);
            //调用QueryRunner类中的query方法，进行执行失去了语句
            /**
             * 第一个参数：提供数据库连接
             * 第二个参数：提供sql语句
             * 第三个参数：提供封装器
             * 第四个参数：给占位符赋值
             *
             * 注意：这里的封装器，内部封装类，本人没有具体写，所以输出不了结果
             */

            Customer customer = queryRunner.query(connection, str, beanHandler, "李斯");
            System.out.println(customer);

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            JdbcUtils.closeResource(connection);
        }
    }

}
